package com.litchi.tutor.common.annotation;

import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.ValueConstants;

import java.lang.annotation.*;

/**
 * 处理接收单个参数的请求体
 *
 * @author xyouzi
 * @since 2021-11-26
 */
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBodyParam {

    /**
     * 请求参数的名称 {@link #name}
     */
    @AliasFor("name")
    String value() default "";

    /**
     * 请求参数的名称 {@link #value}
     */
    @AliasFor("value")
    String name() default "";

    /**
     * 是否必填
     * 默认值为 {@code true}, 如果请求中缺少参数, 将引发异常
     * 如果请求中允许参数缺省, 或可以接收 {@code null}, 则需要设置为 {@code false}
     * 或者提供一个默认值 {@link #defaultValue}, 它将隐式地将此标志设置为 {@code false}
     */
    boolean required() default true;

    /**
     * 当未提供请求参数或值为空时的默认值
     * 提供默认值会隐式地将 {@link #required} 设置为 {@code false}
     */
    String defaultValue() default ValueConstants.DEFAULT_NONE;

}
